﻿using System;

namespace Foasis.Video
{
	/// <summary>
	/// 视频类接口。
	/// </summary>
	public interface IVideo
	{
		/// <summary>
		/// 关闭视频。
		/// </summary>
		void Close();
		/// <summary>
		/// 当前帧类型（关键、空白、一般）。
		/// </summary>
		int CurrentFrameNumber
		{
			get;
			set;
		}
		/// <summary>
		/// 当前帧类型（关键、空白、一般）。
		/// </summary>
		Foasis.Video.FrameType CurrentFrameType
		{
			get;
		}
		/// <summary>
		/// 该视频所含帧数。
		/// </summary>
		int FrameCount
		{
			get;
		}
		/// <summary>
		/// 该视频帧速率。
		/// </summary>
		double FrameRate
		{
			get;
		}
		/// <summary>
		/// 得到当前帧信息。
		/// </summary>
		/// <param name="output">位图信息。</param>
		void GetFrame(ref System.Drawing.Bitmap output);
		/// <summary>
		/// 得到指定帧信息。
		/// </summary>
		/// <param name="output">位图信息。</param>
		/// <param name="frameNumber">帧序号。</param>
		void GetFrame(ref System.Drawing.Bitmap output, int frameNumber);

		/// <summary>
		/// 得到指定帧信息。
		/// </summary>
		/// <param name="outData">输出byte数据。</param>
		/// <param name="frameIndex">帧序号。</param>
		/// <param name="ColorSpace">输出数据的色彩空间。</param>
		void GetFrame(out byte[] outData, int frameIndex, AviSynth.AviSynthColorspace ColorSpace);

		/// <summary>
		/// 得到当前帧信息。
		/// </summary>
		/// <param name="outData">当前帧byte数据。</param>
		/// <param name="ColorSpace">输出数据的色彩空间。</param>
		void GetFrame(out byte[] outData, AviSynth.AviSynthColorspace ColorSpace);
		/// <summary>
		/// 该视频高度。
		/// </summary>
		int Height
		{
			get;
		}
		/// <summary>
		/// 打开视频。
		/// </summary>
		/// <param name="filePath">视频路径。</param>
		void Open(string filePath);
		/// <summary>
		/// 该视频尺寸。
		/// </summary>
		System.Drawing.Size Size
		{
			get;
		}
		/// <summary>
		/// 该视频宽度。
		/// </summary>
		int Width
		{
			get;
		}
	}
}
